package cn.com.nes.site.service.system.region;

import cn.com.nes.mybatis.agent.system.entity.SystemXzqh;
import cn.com.nes.site.service.system.region.dto.RegionCodeTreeNode;
import cn.com.nes.site.service.system.region.dto.RegionDTO;
import cn.com.nes.site.service.system.region.dto.XzqhDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface XzqhService extends IService<SystemXzqh> {

    /**
     * 获取行政区划前缀
     */
    String getAreaCodePrefix(String areaCode);

    String getUserAreaCode(String userId);

    /**
     * 查询行政区划列表
     * @param regionCodeList
     * @return
     */
    List<RegionCodeTreeNode> getRegionCodeList(List<String> regionCodeList);

    /**
     * 查询行政区划列表
     * @param xzqhIdList
     * @return
     */
    List<XzqhDTO> getXzqhListByXzqhdmList(List<String> xzqhIdList);

    /**
     * 根据行政区划编码查询行政区划经纬度
     * @param areaCode
     * @return
     */
    Map<String, BigDecimal> getCoordinate(String areaCode);

    /**
     * 根据xzqhdm查询行政区划名称
     */
    String getAreaName(String areaCode);

    /**
     * 根据AreaCodeSet查询行政区划名称
     */
    String getAreaName(String delimiter, Set<String> areaCodeSet);

    /**
     * 查询下级所有行政区划代码
     */
    List<String> getChildAreaCodesByParentAreaCodeList(List<String> parentList, boolean retainParentAreaCode) throws Exception;

    /**
     * 查询下级所有行政区划代码
     */
    Set<String> getChildAreaCodesByParentAreaCodeSet(Set<String> parentSet, boolean retainParentAreaCode) throws Exception;

    /**
     * 根据行政区划代码查询下级
     */
    List<XzqhDTO> getChildListByAreaCode(String areaCode) throws Exception;

    /**
     * 查询行政区划信息
     */
    XzqhDTO getAreaInfo(String areaCode) throws Exception;

    /**
     * 处理行政区划代码列表
     * @param handleType   true - 交集, false - 并集
     * @param checkEmptyCollection 是否跳过空集合 true - 跳过空集合
     * @param projectAreaCodeList   待处理的行政区划代码列表
     * @return 处理过的行政区划代码列表
     */
    Set<String> handleAreaCodeList(boolean handleType, boolean checkEmptyCollection, List<String>... projectAreaCodeList) throws Exception;


    List<SystemXzqh> getListByPrefix(String regionCodePrefix) throws Exception;


    /**
     * Retrieves a list of RegionDTO objects based on the provided list of region codes.
     *
     * @param regionCodes A list of strings representing the codes of the regions to fetch.
     * @return A list of RegionDTO instances corresponding to the input region codes.
     */
    List<RegionDTO> getRegionCodes(List<String> regionCodes);

}
